package Controleur;

import Modele.Partie;
import Modele.Questionnaire;
import Vue.Accueil;
import Vue.AppletFenetre;
import Vue.QCM;
import Vue.TAT;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Impl�mente ActionListener. Contient les differentes m�thodes � appeler en
 * fonction des actions sur le JPanel Accueil.
 */
public class AccueilListener implements ActionListener {

    private AppletFenetre applet;
    private Accueil accueil;

    public AccueilListener(AppletFenetre applet) {
        this.applet = applet;
        accueil = applet.getAccueil();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("Valider")) {
            String pseudo = accueil.getPseudo();
            String modeJeu = accueil.getModeJeu().getActionCommand();

            /*
             * Si le pseudo est conforme et que le type de jeu est choisi
             */
            if (verifierPseudo(pseudo) && verifierPartie(accueil.getModeJeu())) {
                //On démarre la partie selon le mode de jeu choisi
                Partie partie = demarrerPartie(pseudo, modeJeu);
                //On crée un controller qui s'occupe de la partie
                //jeu.setJeuListener(new JeuListener(partie));   
                try {
                    if (modeJeu.equals("qcm")) {
                        QCM qcm;
                        qcm = new QCM(partie);
                        applet.getContent().add(qcm, applet.getListContent()[1]);
                        applet.setQCM(qcm);
                    } else {
                        TAT tat;
                        tat = new TAT(partie);
                        applet.getContent().add(tat, applet.getListContent()[1]);
                        applet.setTAT(tat);
                    }
                    applet.ajouterBoutonAccueil();
                    applet.ajouterBoutonValiderQuestion();
                    applet.getCardLayout().show(applet.getContent(), applet.getListContent()[1]);
                } catch (IOException ex) {
                    Logger.getLogger(AccueilListener.class.getName()).log(Level.SEVERE, null, ex);
                }


            }
        }

        if (e.getActionCommand().equals("Scores")) {
            applet.getCardLayout().show(applet.getContent(), applet.getListContent()[2]);
        }


    }

    public Accueil getAccueil() {
        return accueil;
    }

    public boolean verifierPseudo(String pseudo) {

        Pattern pattern = Pattern.compile("\\W"); //Désigne les caractères non mot (espace, virgule etc)
        Matcher matcher = pattern.matcher(pseudo);

        //Si le pseudo n'est pas vide qu'on ne retrouve pas de caractère spécial
        //l'underscore est accepté
        if (!pseudo.isEmpty() && !matcher.find()) {
            return true;
        } else {
            return false;
        }
    }

    public boolean verifierPartie(ActionEvent e) {
        String modeJeu = e.getActionCommand(); //On récupère le mode de jeu (qcm ou tat)
        if (modeJeu.isEmpty()) {
            return false;
        } else {
            return true;
        }

    }

    public Partie demarrerPartie(String pseudo, String modeJeu) {
        Partie partie;
        if (modeJeu.equals("qcm")) {
            partie = new Partie(pseudo, 0, new Questionnaire("qcm"));
        } else {
            partie = new Partie(pseudo, 0, new Questionnaire("TAT"));
        }
        return partie;
    }
}